package com.demo.java.OD451_500.OD487;

import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des：【TLV解析Ⅰ(E卷-100分)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146417546
 */
public class OdMain {
    public static void main(String[] args) {
        // 创建Scanner对象，处理输入
        Scanner in = new Scanner(System.in);

        // 读取输入的Tag值（指定的标签）
        String tag = in.nextLine();

        // 读取并分割输入的TLV信息，每个信息项用空格分隔
        String[] tlv_info = in.nextLine().split(" ");

        // 遍历TLV数据，i是遍历的索引
        for (int i = 0; i < tlv_info.length; ) {
            // 通过tlv_info[i + 2]和tlv_info[i + 1]拼接成一个16进制的字符串，
            // 然后将其转为十进制整数，表示Value部分的长度
            int length = Integer.parseInt(tlv_info[i + 2] + tlv_info[i + 1], 16);

            // 判断当前的Tag是否与输入的Tag匹配
            if (tag.equals(tlv_info[i])) {
                // 如果匹配，创建StringBuilder用于存储当前Tag对应的Value部分
                StringBuilder res_str = new StringBuilder();

                // 从tlv_info[i + 3]开始，到i + 3 + length结束，取出对应的Value部分
                // 这些值是Value的内容，逐个拼接到StringBuilder中
                for (int j = i + 3; j < i + 3 + length; j++) {
                    res_str.append(tlv_info[j]).append(" ");
                }

                // 输出当前Tag对应的Value部分，注意输出时去掉了末尾的空格
                System.out.println(res_str.toString().trim());
                break;  // 找到指定的Tag后，退出循环
            } else {
                // 如果Tag不匹配，跳过当前Tag的数据，i加上Length和3
                // 3是因为TLV每个条目包含Tag、Length、Value三个部分
                i += length + 3;
            }
        }
    }
}
